/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package InstanciaJogo.FasesJogo;

import ClassesListas.ImagensApresentadasSubFase;
import ClassesUnicas.ImagemApresentadaSubFase;
import DAO.DAOInstanciaSubFase;
import InstanciaJogo.InstanciaJogoSwing;

/**
 * InstanciaSubFase
 *
 * Versao 1.0
 *
 * Data Criação 20/11/2013
 *
 * @author Igor
 */
public interface InstanciaSubFase {
    //Getters e Setters
    /**
     * @return the idInstanciaSubFase
     */
    public long getIdInstanciaSubFase();

    /**
     * @param idInstanciaSubFase the subFase to set
     */
    public void setIdInstanciaSubFase(long idInstanciaSubFase);
    
    /**
     * @return the subFase
     */
    public long getSubFase();

    /**
     * @param subFase the subFase to set
     */
    public void setSubFase(long subFase);

    /**
     * @return the imagensFase
     */
    public ImagensApresentadasSubFase getImagensFase();

    /**
     * @param imagensFase the imagensFase to set
     */
    public void setImagensFase(ImagensApresentadasSubFase imagensFase);

    /**
     * @return the indiceImagemApresentadaSubFaseEstatica
     */
    public int getIndiceImagemApresentada();

    /**
     * @param indiceImagemApresentada the indiceImagemApresentadaSubFaseEstatica to set
     */
    public void setIndiceImagemApresentada(int indiceImagemApresentada);

    /**
     * @return the quantidadeImagensApresentadasSubFaseParaAvaliar
     */
    public int getQuantidadeImagensParaAvaliar();

    /**
     * @param quantidadeImagensParaAvaliar the quantidadeImagensApresentadasSubFaseParaAvaliar to
 set
     */
    public void setQuantidadeImagensParaAvaliar(int quantidadeImagensParaAvaliar);

    /**
     * Preenche com o total de imagens a serem avaliadas, ou seja, o ArrayList
     * acabou de ser preenchido
     */
    public void setQuantidadeImagensParaAvaliar();
    
    /**
     * @return the quantidadeImagensAvaliadasCorretamente
     */
    public int getQuantidadeImagensAvaliadasCorretamente();

    /**
     * @param imagensAvaliadaCorretamente the quantidadeImagensAvaliadasCorretamente to set
     */
    public void setQuantidadeImagensAvaliadasCorretamente(int quantidademagensAvaliadasCorretamente);
    
    /**
     * @return the subFaseDAO
     */
    public DAOInstanciaSubFase getSubFaseDAO();

    /**
     * @param subFaseDAO the subFaseDAO to set
     */
    public void setSubFaseDAO(DAOInstanciaSubFase subFaseDAO);
    
    //Outros metodos
    /**
     * Metodo que retorna a ultima imagem apresentada
     *
     * @return O objeto imagem, que foi apresentado por ultimo
     */
    public ImagemApresentadaSubFase imagemApresentadaAtual();

    /**
     * Retorna a proxima imagem a ser apresentada
     *
     * @return a proxima imagem a ser apresentada
     */
    public ImagemApresentadaSubFase retornaProximaImagemApresentada();

    /**
     * Faz a selecao da imagem a ser apresentada, excluindo as ja avaliadas ou que foram apresentadas acima do limite
     * @return 
     */
    public ImagemApresentadaSubFase selecionaProximaImagemApresentada();

    /**
     * Mostra a imagem no JLabel de apresentacao e escreve informacoes sobre a
     * imagem apresentada
     *
     * @param instanciaJogo
     */
    /**
     * Mostra a imagem no JLabel de apresentacao e escreve informacoes sobre a
     * imagem apresentada
     * @param instanciaJogo
     * @param jogoPausado define se a apresentacao da imagem prove do pause no jogo
     */
    public void apresentarImage(InstanciaJogoSwing instanciaJogo, boolean jogoPausado);

    /**
     * Avalia a imagem apresentada
     *
     * @param idExpressao expressao avaliada pelo jogador
     * @return Verdadeiro ou Falso de acordo com a comparacao da expressao
     */
    public boolean avaliarImagemEstatica(int idExpressao, long idModoJogo);
    
    /**
     * Realiza a gravaçao da sub fase no BD
     * @param idJogo
     * @return 
     */
    public long gravaInstanciaSubFase(long idJogo);
    
    /**
     * Retorna a porcentagem de imagens avaliadas corretamente daquela subfase específica
     * @return 
     */
    public long buscaPorcentagemAcerto();
}
